मुख्य कंटेंट तक स्किप करें

शेड्यूल्ड MQTT नियंत्रण

टिप

निर्धारित MQTT नियंत्रण का उद्देश्य समय से पहले निर्धारित संदेशों के लिए है। लाइव नियंत्रण के लिए, इसके बजाय लाइव MQTT नियंत्रण देखें।

यह गाइड आपको अपने DemoBrandName ControllerDemoName पर MQTT को कॉन्फ़िगर करने में मदद करेगी ताकि बैटरी और सौर पैनल स्थापितियों को दूरस्थ रूप से नियंत्रित और मॉनिटर किया जा सके।

आपको क्या चाहिए

  1. DemoBrandName ControllerDemoName जिसमें इंटरनेट कनेक्टिविटी हो।
  2. MQTT क्रेडेंशियल्स: इसे support@eniris.be पर ईमेल भेजकर अनुरोध किया जा सकता है।
  3. पायथन विकास वातावरण (या कोई अन्य MQTT क्लाइंट)। यह गाइड आपको MQTT और कमांड भेजने के साथ शुरुआत करने के लिए पायथन में लिखित एक मूल उदाहरण का उपयोग करती है। उपयोग में आसानी के लिए हम पायथन का उपयोग करने की सिफारिश करते हैं, लेकिन कोई अन्य MQTT क्लाइंट भी समर्थित है।

अतिरिक्त जानकारी

MQTT इंटरनेट पर एक तेज संचार प्रोटोकॉल है। यह एक प्रकाशित/सदस्यता संदेश प्रणाली है, जो आपकी मशीन और DemoBrandName ControllerDemoName के बीच सीधे कनेक्शन की अनुमति देती है। आपकी संपत्तियों को सौर, बैटरी, ईवी, और एचवीएसी समूहों में वर्गीकृत किया गया है। इस समय, यह एकीकरण समूह के अनुसार नियंत्रण की अनुमति देता है, न कि डिवाइस के अनुसार।

पहली बार कॉन्फ़िगरेशन (नए उपयोगकर्ताओं के लिए प्रारंभ करने का बिंदु)

मेरे पास एक DemoBrandName ControllerDemoName है जिसे मैं MQTT रिमोट कंट्रोल के लिए सेट करना चाहूंगा।

1. अपने नेटवर्क की जांच करें

सुनिश्चित करें कि आपका नेटवर्क पोर्ट 1883 पर mqtt नेटवर्क ट्रैफ़िक की अनुमति देता है। आप यह कमांड का उपयोग करके कर सकते हैं:

nc -zv mqtt.eniris.be 1883

जब यह कमांड उपलब्ध नहीं है, तो आप वैकल्पिक रूप से यह पायथन कोड डाउनलोड और निष्पादित कर सकते हैं।

जब संदेह हो, तो अपने नेटवर्क इंजीनियर से परामर्श करें या कनेक्शन त्रुटियों के होने पर अस्थायी रूप से अपने फोन के 4G/5G हॉटस्पॉट का उपयोग करें।

नोट

जब पोर्ट 1883 आपके नेटवर्क से पहुंच योग्य नहीं है, तो हम पोर्ट 80 पर एक बैकअप प्रदान करते हैं। इसे इस मैनुअल के अगले चरण में आपके MQTT-क्लाइंट में कॉन्फ़िगर किया जा सकता है।

2. अपने डिवाइस जोड़ें

कमिशनिंग इंटरफेस पर लॉगिन करें और सुनिश्चित करें कि डिवाइस जोड़ें को DemoBrandName ControllerDemoName में जोड़ा गया है।

3. MQTT बाह्य संकेत जोड़ें

Image 1
Image 1
Image 1

4. MQTT रिमोट सिग्नल सक्षम करें

सभी डिवाइसों का चयन करें जिन्हें आप MQTT रिमोट कंट्रोल में शामिल करना चाहते हैं।

Image 1

5. रिमोट सिग्नल जोड़ा गया

MQTT रिमोट कंट्रोल इंटरफेस अब DemoBrandName ControllerDemoName पर सक्रिय किया गया है।

हम अब कुछ मूल कमांड भेजने के लिए तैयार हैं, एक सरल उदाहरण का उपयोग करते हुए। स्थिति कॉलम आपको बताता है कि कोई भी कमांड सक्रिय है या नहीं।

पायथन डेमो स्क्रिप्ट

एक अच्छा प्रारंभिक बिंदु होगा आपके नए सेटअप एकीकरण का परीक्षण करना एक सरल उदाहरण के साथ।

यह परीक्षण कोड लगातार निम्नलिखित शेड्यूल भेजने का एक सरल काम करता है:

  • बैटरी: 15 मिनट में 5 kW पर 10 मिनट चार्ज करें
  • सौर: 30 मिनट में 0 kW पर शक्ति सेट करें

DemoBrandName ControllerDemoName एक पुष्टि संदेश के साथ प्रतिक्रिया करता है जिसमें अद्वितीय शेड्यूल पहचानकर्ता या एक त्रुटि संदेश होता है।

हम फिर दोनों डिवाइस प्रकारों के लिए अगला शेड्यूल प्राप्त करते हैं, यह पुष्टि करते हुए कि कमांड सफल रहा।

कृपया नीचे दी गई फ़ाइल को अपनी पसंद के पायथन आईडीई में डाउनलोड करें। अपने अनुक्रमांक और MQTT-क्रेडेंशियल्स भरें और स्क्रिप्ट निष्पादित करें:

जब उपरोक्त सफल हो जाता है, तो आप अन्य प्रकार के संदेश भेजना जारी रख सकते हैं। सभी संदेशों का विवरण नीचे दिया गया है।

MQTT दस्तावेज़ कमांड भेजने के लिए

यह अनुभाग DemoBrandName ControllerDemoName के नेटवर्क में उपकरणों के अनुसूचित नियंत्रण को सेटअप करने के लिए MQTT संदेश प्रारूप और पेलोड आवश्यकताओं को विस्तार से बताता है।

MQTT विषय

  • सदस्यता विषय: standard1/rp_one_s/remoteScheduleMetrics/<controller SN>
  • फ़ीडबैक विषय: standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>

जहाँ <controller SN> को आप जिस DemoBrandName ControllerDemoName को नियंत्रित करना चाहते हैं, के वास्तविक क्रमांक से प्रतिस्थापित किया जाना चाहिए।

MQTT संदेश प्रकार

1. शेड्यूल सेट करें (set_schedule)

एक उपकरण प्रकार के लिए नया शेड्यूल बनाता है।

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (वैकल्पिक),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watts>,
"replace_overlap": <True/False> (वैकल्पिक) (डिफ़ॉल्ट=False),
}
}

प्रतिक्रिया (सफलता):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Schedule ID>,
"deleted_ids": <Schedulde IDs deleted if replace_overlap=True>
},
"responseCode": 0
}
}

2. शेड्यूल प्राप्त करें (get_schedule)

ID द्वारा एक विशिष्ट शेड्यूल प्राप्त करता है।

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}

प्रतिक्रिया:

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

3. सक्रिय शेड्यूल प्राप्त करें (get_active_schedule)

एक उपकरण प्रकार के लिए वर्तमान में सक्रिय शेड्यूल प्राप्त करता है।

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (वैकल्पिक),
}
}

प्रतिक्रिया (सफलता):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

4. अगला शेड्यूल प्राप्त करें (get_next_schedule)

एक उपकरण प्रकार के लिए अगला आने वाला शेड्यूल प्राप्त करता है।

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (वैकल्पिक),
}
}

प्रतिक्रिया (सफलता):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}

5. शेड्यूल प्राप्त करें (get_schedules)

एक विशिष्ट तिथि के लिए सभी शेड्यूल प्राप्त करता है।

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}

Response (Success):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}

6. भविष्य की अनुसूचियाँ प्राप्त करें (get_future_schedules)

सभी भविष्य की अनुसूचियाँ प्राप्त करता है।

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}

Response (Success):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}

7. अनुसूची हटाएँ (remove_schedule)

ID द्वारा एक विशिष्ट अनुसूची को हटाता है।

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}

Response (Success):

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "अनुसूची <Schedule ID> सफलतापूर्वक हटाई गई",
"responseCode": 0
}
}

8. साइट फीडबैक प्राप्त करें (get_feedback)

सिस्टम की स्थिति पर विस्तृत फीडबैक प्राप्त करता है।

{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {}
}

Response (Success):

फीडबैक पेलोड संरचना

मानक अनुसूची प्रतिक्रिया प्रारूप

{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Optional),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint in watts>,
"created_at": <Unix Timestamp>
}

घटक प्रकार और नीतियाँ

उपलब्ध घटकों और नीतियों के बारे में विवरण के लिए जो अनुसूचित किए जा सकते हैं, MQTT घटक और नीतियाँ अनुभाग को लाइव MQTT नियंत्रण दस्तावेज़ में देखें।

डिवाइस-विशिष्ट अनुसूचियाँ वैकल्पिक node_id फ़ील्ड का उपयोग करके भेजी जा सकती हैं, जो नियंत्रित करने योग्य उपकरण के नोड ID को संदर्भित करती हैं।

त्रुटि प्रबंधन

जब एक त्रुटि होती है, तो सभी संदेश responseCode: 1 के साथ एक त्रुटि प्रतिक्रिया लौटाकर दे सकते हैं:

{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}

जब एक अप्रासंगिक त्रुटि होती है, तो संदेश का प्रकार (general_error) होगा।

सामान्य त्रुटियों में शामिल हैं:

  • मौजूदा अनुसूचियों के साथ अनुसूची ओवरलैप
  • अमान्य समय सीमा
  • डिवाइस प्रकार नहीं मिला
  • अनुसूची ID नहीं मिली
  • डिवाइस प्रकार के लिए अमान्य नीति

अनुसूची प्रबंधन नियम

  1. ओवरलैप नियम
    • अनुसूचियाँ एक ही डिवाइस प्रकार के लिए ओवरलैप नहीं कर सकतीं
    • अनुसूचियाँ एक ही डिवाइस के लिए ओवरलैप नहीं कर सकतीं
    • एक ही डिवाइस और डिवाइस प्रकार के लिए अनुसूचियाँ ओवरलैप नहीं कर सकतीं
    • मौजूदा, ओवरलैपिंग अनुसूचियाँ तब हटा दी जाएंगी यदि नए अनुसूची को बनाते समय replace_overlap वेरिएबल को True पर सेट किया गया हो।
  2. प्रत्येक अनुसूची में होना चाहिए:
    • एक मान्य डिवाइस प्रकार
    • एक प्रारंभ समय (Unix टाइमस्टैम्प)
    • एक समाप्ति समय (Unix टाइमस्टैम्प)
    • एक नीति (डिवाइस प्रकार की उपलब्ध नीतियों से मेल खाने वाली)
    • एक पावर सेटपॉइंट (उन नीतियों के लिए जो इसे आवश्यक बनाती हैं)
  3. प्रारंभ समय समाप्ति समय से पहले होना चाहिए
  4. प्रारंभ समय को कम से कम पाँच मिनट भविष्य में होना चाहिए
  5. अनुसूचियाँ केवल तभी हटाई जा सकती हैं जब वे कम से कम पाँच मिनट भविष्य में शुरू हों
  6. अनुसूचियाँ विभिन्न डिवाइस प्रकारों के लिए स्वतंत्र रूप से सेट की जा सकती हैं
  7. जब एक अनुसूची सक्रिय हो जाती है, तो सिस्टम स्वचालित रूप से उचित नीति लागू करता है